package cn.datastruct.EightTree;

public class binaryTree {

    //成员变量
    private int[] arr;//存储数据节点的数组

    //构造函数
    public binaryTree(int[] arr) {
        this.arr = arr;
    }

    //编写一个方法完成二叉树的前序遍历

    /**
     * @param index 数组的下标
     */
    public void preOrder(int index) {
        if (this.arr.length == 0 || this.arr == null) {
            System.out.println("数组不存在");
            return;
        }
        //输出当前元素
        System.out.printf("%d\t", arr[index]);

        //判断是否越界
        if (2 * index + 1 < arr.length) {
            preOrder(2 * index + 1);
        }
        if (2 * index + 2 < arr.length) {
            preOrder(2 * index + 2);
        }
    }

    public void preOrder() {
        this.preOrder(0);
    }
    //编写一个方法完成二叉树的中序遍历

    /**
     * @param index 数组的下标
     */
    public void inOrder(int index) {
        if (this.arr.length == 0 || this.arr == null) {
            System.out.println("数组不存在");
            return;
        }
        //输出当前元素

        //判断是否越界
        if (2 * index + 1 < arr.length) {
            this.inOrder(2 * index + 1);
        }
        System.out.printf("%d\t", arr[index]);
        if (2 * index + 2 < arr.length) {
            this.inOrder(2 * index + 2);
        }
    }

    public void inOrder() {
        this.inOrder(0);
    }
    //编写一个方法完成二叉树的后序遍历
    /**
     * @param index 数组的下标
     */
    public void postOrder(int index) {
        if (this.arr.length == 0 || this.arr == null) {
            System.out.println("数组不存在");
            return;
        }
        //输出当前元素

        //判断是否越界
        if (2 * index + 1 < arr.length) {
            this.postOrder(2 * index + 1);
        }
        if (2 * index + 2 < arr.length) {
            this.postOrder(2 * index + 2);
        }
        System.out.printf("%d\t", arr[index]);
    }

    public void postOrder() {
        this.postOrder(0);
    }

}
